package com.zgjkhis.modules.system.service;

import com.zgjkhis.common.service.BaseService;
import com.zgjkhis.domain.PageResult;
import com.zgjkhis.modules.basicsetting.service.dto.AdditionalQueryCriteria;
import com.zgjkhis.modules.basicsetting.service.dto.DrugInfoQueryCriteria;
import com.zgjkhis.modules.system.domain.Drug;
import com.zgjkhis.modules.system.domain.vo.DrugBatchVO;
import com.zgjkhis.modules.system.service.dto.DrugDto;
import com.zgjkhis.modules.system.service.dto.DrugQueryCriteria;
import com.zgjkhis.modules.system.service.dto.DrugStockWarningDto;
import com.zgjkhis.modules.system.service.dto.DrugTypeCountDto;
import org.springframework.data.domain.Pageable;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * @Author yzq
 * @Description 药品
 * @Date 2021/6/23 9:45
 * @Param
 * @return
 **/
public interface DrugService extends BaseService<Drug>{


    /**
     * @Author yzq
     * @Description 分页查询药品
     * @Date 2021/6/24 10:24
     * @Param [criteria, pageable]
     * @return java.lang.Object
     **/
    PageResult<Drug> findAllByPageable(DrugQueryCriteria criteria, Pageable pageable);

    /**
     * 查询药品
     * @param criteria
     * @return
     */
    List<Drug> findAllByPageable(DrugQueryCriteria criteria);

    /**
     * @Author yzq
     * @Description 查询单个信息
     * @Date 2021/6/24 11:53
     * @Param [id]
     * @return java.lang.Object
     **/
    DrugDto findDetailById(String id);

    /**
     * @Author yzq
     * @Description 查看药品分类下药品个俗话
     * @Date 2021/6/25 9:36
     * @Param []
     * @return java.util.List<com.zgjkhis.modules.system.service.dto.DrugTypeCountDto>
     **/
    List<DrugTypeCountDto> findCountByDrugType(DrugQueryCriteria criteria);

    /**
     * @Author yzq
     * @Description 批量修改预警值
     * @Date 2021/6/25 9:37
     * @Param [drugBatchVO]
     * @return boolean
     **/
    boolean batchUpdateWarning(List<DrugBatchVO> drugBatchVO);

    /**
     * @Author yzq
     * @Description 批量修改状态
     * @Date 2021/6/25 9:37
     * @Param [list]
     * @return boolean
     **/
    boolean batchUpdateStatus(List<DrugBatchVO> list);

    /**
     * @Author yzq
     * @Description 根据药品分类下载药品
     * @Date 2021/6/25 9:37
     * @Param [list, response]
     * @return void
     **/
    void dowonload(List<Drug> list, HttpServletResponse response) throws IOException;

    /**
     * @Author yzq
     * @Description 批量修改上传文件
     * @Date 2021/6/25 10:41
     * @Param [file]
     * @return void
     **/
    void batchUpdateSalsePrice(MultipartFile file) throws IOException;

    void batchSave(MultipartFile file, String flag) throws IOException;

    /**
     * 首页.库存预警
     * @return
     */
    List<DrugStockWarningDto> findStockWarning(String pharmacyId);

    /**
     * @Author yzq
     * @Description 根据药品id，修改库存
     * @Date 2021/9/2 10:21
     * @Param [id]
     * @return void
     **/
    void updateStockById(Long id);
    /**
     * @Author yzq
     * @Description 根据药品id，修改库存
     * @Date 2021/9/2 10:21
     * @Param [id]
     * @return void
     **/
    void updateStockByIdForDelivery(Long id);

    /**
     * @Author yzq
     * @Description 修改药品使用数量
     * @Date 2021/9/2 14:58
     * @Param [drug, deliveryNum, minDeliveryNum]
     * @return void
     **/
    void updateMothUseById(Long id, Integer deliveryNum, Integer minDeliveryNum);

    /**
     * @Author yzq
     * @Description 查询耗材药品根据名字
     * @Date 2021/9/8 11:58
     * @Param [additionalQueryCriteria]
     * @return java.util.List<com.zgjkhis.modules.system.domain.Drug>
     **/
    List<Drug> finListByAdd(AdditionalQueryCriteria additionalQueryCriteria);

    /**
     * @Author yzq
     * @Description 根据处方类型，名称查询药材
     * @Date 2021/9/8 14:10
     * @Param [drugInfoQueryCriteria]
     * @return java.util.List<com.zgjkhis.modules.system.domain.Drug>
     **/
    List<Drug> findDrugByInfoType(DrugInfoQueryCriteria drugInfoQueryCriteria);

    /**
     * 导出药品
     * @param criteria
     * @param response
     */
    void outDrugs(DrugQueryCriteria criteria, HttpServletResponse response) throws IOException;
}
